import QtQuick
import QtWebEngine

WebEngineView {
  id: mapView
  // 设置默认大小
  width: 800
  height: 600

  // 使用本地文件路径而不是qrc资源
  url: Qt.resolvedUrl("../../source/map/index.html")
  //url: Qt.resolvedUrl("qrc:/test2/source/map/index.html")

  // 修复事件处理语法
  // 添加页面加载完成后的延迟调用
  property bool pageLoaded: false
  // 改进安全的JavaScript调用函数
  function safeRunJavaScript(script) {
    if (pageLoaded) {
      runJavaScript(script, function(result) {
        console.log("JavaScript执行结果:", result);
      });
    } else {
      console.log("页面未加载完成，延迟执行:", script);
      // 使用定时器延迟执行
      delayTimer.script = script;
      delayTimer.start();
    }
  }
  
  // 添加更可靠的页面加载检测
  onLoadingChanged: function (loadingInfo) {
    if (loadingInfo.status === WebEngineView.LoadSucceededStatus) {
      console.log("地图页面加载成功");
      // 延迟设置pageLoaded，确保JavaScript完全初始化
      Qt.callLater(function() {
        pageLoaded = true;
      });
    } else if (loadingInfo.status === WebEngineView.LoadFailedStatus) {
      console.log("地图页面加载失败:", loadingInfo.errorString);
    }
  }

  // 改进延迟执行定时器
  Timer {
    id: delayTimer
    interval: 500  // 增加延迟时间到500ms
    repeat: false
    property string script: ""
    property int retryCount: 0
    onTriggered: {
      if (pageLoaded && script !== "") {
        runJavaScript(script, function(result) {
          console.log("JavaScript执行成功:", script);
        });
        script = "";
        retryCount = 0;
      } else if (script !== "" && retryCount < 15) { // 增加重试次数
        // 如果页面仍未加载，继续等待，但限制重试次数
        retryCount++;
        interval = Math.min(interval * 1.2, 1000); // 递增延迟时间
        start();
      } else {
        console.log("JavaScript执行超时，放弃执行:", script);
        script = "";
        retryCount = 0;
        interval = 500; // 重置延迟时间
      }
    }
  }

  // 可以添加与HTML页面的交互方法
  function updateDronePosition(droneId, lat, lng, altitude) {
    var script = "if(typeof updateDronePosition === 'function') { updateDronePosition(" + lat + ", " + lng + ", " + droneId + ", " + altitude + "); }";
    safeRunJavaScript(script);
  }
  function updateDroneFormation(droneId, lat, lng, altitude) {
    var script = "if(typeof updateDronePositionWithFormation === 'function') { updateDronePositionWithFormation(" + droneId + ", " + lat + ", " + lng + ", " + altitude + "); }";
    safeRunJavaScript(script);
  }
  function clearAllMarkers() {
    var script = "if(document.getElementById('clearMarkersButton')) { document.getElementById('clearMarkersButton').click(); }";
    safeRunJavaScript(script);
  }
  function focusOnLeader() {
    var script = "if(typeof focusOnLeaderDrone === 'function') { focusOnLeaderDrone(); }";
    safeRunJavaScript(script);
  }
}
